{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Deep Q Network with Prioritized Experience Replay"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Imports"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import gym\n",
    "import numpy as np\n",
    "import torch\n",
    "import torch.optim as optim\n",
    "\n",
    "from IPython.display import clear_output\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "from timeit import default_timer as timer\n",
    "from datetime import timedelta\n",
    "import math\n",
    "\n",
    "from utils.wrappers import *\n",
    "from agents.DQN import Model as DQN_Agent\n",
    "from networks.networks import DQN\n",
    "from networks.network_bodies import AtariBody\n",
    "\n",
    "from utils.hyperparameters import Config"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Hyperparameters"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "config = Config()\n",
    "\n",
    "config.device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\n",
    "device = config.device\n",
    "\n",
    "#epsilon variables\n",
    "config.epsilon_start = 1.0\n",
    "config.epsilon_final = 0.01\n",
    "config.epsilon_decay = 30000\n",
    "config.epsilon_by_frame = lambda frame_idx: config.epsilon_final + (config.epsilon_start - config.epsilon_final) * math.exp(-1. * frame_idx / config.epsilon_decay)\n",
    "\n",
    "#misc agent variables\n",
    "config.GAMMA=0.99\n",
    "config.LR=1e-4\n",
    "\n",
    "#memory\n",
    "config.TARGET_NET_UPDATE_FREQ = 1000\n",
    "config.EXP_REPLAY_SIZE = 100000\n",
    "config.BATCH_SIZE = 32\n",
    "config.PRIORITY_ALPHA=0.6\n",
    "config.PRIORITY_BETA_START=0.4\n",
    "config.PRIORITY_BETA_FRAMES = 100000\n",
    "\n",
    "#Learning control variables\n",
    "config.LEARN_START = 10000\n",
    "config.MAX_FRAMES=700000\n",
    "\n",
    "#Nstep controls\n",
    "config.N_STEPS=1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Prioritized Replay (Without Rank-Based Priority)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "class PrioritizedReplayMemory(object):  \n",
    "    def __init__(self, capacity, alpha=0.6, beta_start=0.4, beta_frames=100000):\n",
    "        self.prob_alpha = alpha\n",
    "        self.capacity   = capacity\n",
    "        self.buffer     = []\n",
    "        self.pos        = 0\n",
    "        self.priorities = np.zeros((capacity,), dtype=np.float32)\n",
    "        self.frame = 1\n",
    "        self.beta_start = beta_start\n",
    "        self.beta_frames = beta_frames\n",
    "\n",
    "    def beta_by_frame(self, frame_idx):\n",
    "        return min(1.0, self.beta_start + frame_idx * (1.0 - self.beta_start) / self.beta_frames)\n",
    "    \n",
    "    def push(self, transition):\n",
    "        max_prio = self.priorities.max() if self.buffer else 1.0**self.prob_alpha\n",
    "        \n",
    "        if len(self.buffer) < self.capacity:\n",
    "            self.buffer.append(transition)\n",
    "        else:\n",
    "            self.buffer[self.pos] = transition\n",
    "        \n",
    "        self.priorities[self.pos] = max_prio\n",
    "\n",
    "        self.pos = (self.pos + 1) % self.capacity\n",
    "    \n",
    "    def sample(self, batch_size):\n",
    "        if len(self.buffer) == self.capacity:\n",
    "            prios = self.priorities\n",
    "        else:\n",
    "            prios = self.priorities[:self.pos]\n",
    "\n",
    "        total = len(self.buffer)\n",
    "\n",
    "        probs = prios / prios.sum()\n",
    "\n",
    "        indices = np.random.choice(total, batch_size, p=probs)\n",
    "        samples = [self.buffer[idx] for idx in indices]\n",
    "        \n",
    "        beta = self.beta_by_frame(self.frame)\n",
    "        self.frame+=1\n",
    "\n",
    "        #min of ALL probs, not just sampled probs\n",
    "        prob_min = probs.min()\n",
    "        max_weight = (prob_min*total)**(-beta)\n",
    "\n",
    "        weights  = (total * probs[indices]) ** (-beta)\n",
    "        weights /= max_weight\n",
    "        weights  = torch.tensor(weights, device=device, dtype=torch.float)\n",
    "        \n",
    "        return samples, indices, weights\n",
    "    \n",
    "    def update_priorities(self, batch_indices, batch_priorities):\n",
    "        for idx, prio in zip(batch_indices, batch_priorities):\n",
    "            self.priorities[idx] = (prio + 1e-5)**self.prob_alpha\n",
    "\n",
    "    def __len__(self):\n",
    "        return len(self.buffer)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Agent"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "class Model(DQN_Agent):\n",
    "    def __init__(self, static_policy=False, env=None, config=None):\n",
    "        super(Model, self).__init__(static_policy, env, config)\n",
    "    \n",
    "    def declare_networks(self):\n",
    "        self.model = DQN(self.num_feats, self.num_actions, body=AtariBody)\n",
    "        self.target_model = DQN(self.num_feats, self.num_actions, body=AtariBody)\n",
    "    \n",
    "    def declare_memory(self):\n",
    "        self.memory = PrioritizedReplayMemory(self.experience_replay_size, self.priority_alpha, self.priority_beta_start, self.priority_beta_frames)\n",
    "        \n",
    "    def compute_loss(self, batch_vars):\n",
    "        batch_state, batch_action, batch_reward, non_final_next_states, non_final_mask, empty_next_state_values, indices, weights = batch_vars\n",
    "\n",
    "        #estimate\n",
    "        self.model.sample_noise()\n",
    "        current_q_values = self.model(batch_state).gather(1, batch_action)\n",
    "        \n",
    "        #target\n",
    "        with torch.no_grad():\n",
    "            max_next_q_values = torch.zeros(self.batch_size, device=self.device, dtype=torch.float).unsqueeze(dim=1)\n",
    "            if not empty_next_state_values:\n",
    "                max_next_action = self.get_max_next_state_action(non_final_next_states)\n",
    "                self.target_model.sample_noise()\n",
    "                max_next_q_values[non_final_mask] = self.target_model(non_final_next_states).gather(1, max_next_action)\n",
    "            expected_q_values = batch_reward + ((self.gamma**self.nsteps)*max_next_q_values)\n",
    "\n",
    "        diff = (expected_q_values - current_q_values)\n",
    "        self.memory.update_priorities(indices, diff.detach().squeeze().abs().cpu().numpy().tolist())\n",
    "        loss = self.huber(diff).squeeze() * weights\n",
    "        loss = self.huber(diff)\n",
    "    \n",
    "        loss = loss.mean()\n",
    "\n",
    "        return loss"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Plot Results"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot(frame_idx, rewards, losses, sigma, elapsed_time):\n",
    "    clear_output(True)\n",
    "    plt.figure(figsize=(20,5))\n",
    "    plt.subplot(131)\n",
    "    plt.title('frame %s. reward: %s. time: %s' % (frame_idx, np.mean(rewards[-10:]), elapsed_time))\n",
    "    plt.plot(rewards)\n",
    "    if losses:\n",
    "        plt.subplot(132)\n",
    "        plt.title('loss')\n",
    "        plt.plot(losses)\n",
    "    if sigma:\n",
    "        plt.subplot(133)\n",
    "        plt.title('noisy param magnitude')\n",
    "        plt.plot(sigma)\n",
    "    plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Training Loop"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1440x360 with 2 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "start=timer()\n",
    "\n",
    "env_id = \"PongNoFrameskip-v4\"\n",
    "env    = make_atari(env_id)\n",
    "env    = wrap_deepmind(env, frame_stack=False)\n",
    "env    = wrap_pytorch(env)\n",
    "model = Model(env=env, config=config)\n",
    "\n",
    "episode_reward = 0\n",
    "\n",
    "observation = env.reset()\n",
    "for frame_idx in range(1, config.MAX_FRAMES + 1):\n",
    "    epsilon = config.epsilon_by_frame(frame_idx)\n",
    "\n",
    "    action = model.get_action(observation, epsilon)\n",
    "    prev_observation=observation\n",
    "    observation, reward, done, _ = env.step(action)\n",
    "    observation = None if done else observation\n",
    "\n",
    "    model.update(prev_observation, action, reward, observation, frame_idx)\n",
    "    episode_reward += reward\n",
    "\n",
    "    if done:\n",
    "        model.finish_nstep()\n",
    "        model.reset_hx()\n",
    "        observation = env.reset()\n",
    "        model.save_reward(episode_reward)\n",
    "        episode_reward = 0\n",
    "        \n",
    "        if np.mean(model.rewards[-10:]) > 19:\n",
    "            plot(frame_idx, model.rewards, model.losses, model.sigma_parameter_mag, timedelta(seconds=int(timer()-start)))\n",
    "            break\n",
    "\n",
    "    if frame_idx % 10000 == 0:\n",
    "        plot(frame_idx, model.rewards, model.losses, model.sigma_parameter_mag, timedelta(seconds=int(timer()-start)))\n",
    "\n",
    "model.save_w()\n",
    "env.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
